perm filename TBOX.FAI[CMS,LCS]2 blob
sn#345092 filedate 1978-03-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00004 00003 INPUT WAIT
C00005 00004 Update LEDs
C00007 00005 Bit spreading table
C00010 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
T ← 1 ↔ CMD ← 2 ↔ N ← 3
SW0 ← 4 ↔ SW1 ← 5 ↔ SW2 ← 6 ↔ AD ← 7
BRATE ← 21 ;BRATE = tBIT / (2.5 * 2)
OFFSET ← 10 ;OFFSET = tBIT / 2 = Center
LDEF ← 0
ROW0 ← 357 ↔ ROW1 ← 337
ON ← 367 ↔ OFF ← 10 ↔ SBITS ← 60
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
ERROR: DISTI ;TIMER INT VECTOR
RETR
RST: MOVI 377 ;SETUP INPUT PORTS
OUTB
OUTP 1
OUTP 2
MOVI LDEF ;SETUP LED DEFAULT
CALL OLED
JMP SETFLG
; Reset scan flag and timer
UPFLG: STOPT ;STOP TIMER
DJNZ T,SETIME
SETFLG: MOVRI T,5 ;5 = 100 ms
CLRF0 ;Reset scan flag
CPLF0
SETIME: CLRA ;Reset timer
MOVAT
STRTT
JMP CKIN
;INPUT WAIT
INWAIT: JTF UPFLG ;CHECK IF TIMER TIME OUT
CKIN: JT0H INWAIT ;CHECK FOR START BIT
MOVRI N,OFFSET-2
CENTER: DJNZ N,CENTER ;Wait for center of bit
JT0H INWAIT ;Check if valid start bit
CLRA
MOVRI CMD,11 ;# of bits -1
ILOOP: CALL IWAIT
DJNZ CMD,ILOOP
ROLC ;Shift out stop bit
JCC INWAIT ;Check for good stop bit.
CALL OLED ;Update leds
JF0S OSWTCH ;Check if time to scan.
JMP SCAN
IWAIT: MOVRI N,BRATE-4
WAIT: DJNZ N,WAIT
CLRC
JT0H BITON
JMP BITOFF
BITON: CPLC
BITOFF: RORC
RET
;Update LEDs
OLED: MOVAR CMD ;Save command
ORI 7 ;Get cal led
OUTB
MOVI 16
CLRL: OUTB ;Clear led loop
DECA
JBS CLRL
MOVRA CMD
ANDI 7
OUTB ;Write mode led.
RET
; Output switches
OSWTCH: MOVRA SW0
CALL OBYTE
MOVRA SW1
CALL OBYTE
MOVRA AD
CALL OBYTE
CLRA ;Spare output byte
CALL OBYTE
JMP INWAIT
; Output Acc. to SI/O line
OBYTE: CLRC
MOVRI CMD,11 ;# of bits -1
OLOOP: RORC
OUTP 2 ;Output bit
MOVRI N,BRATE-3
OWAIT: DJNZ N,OWAIT
DJNZ CMD,OLOOP
MOVI 377
OUTP 2 ;Stop bit
MOVRI N,BRATE-3
SWAIT: DJNZ N,SWAIT
RET
; Bit spreading table
LOC (. + 377) ∧ 177400
0 ↔ 1 ↔ 4 ↔ 5 ↔ 20 ↔ 21 ↔ 24 ↔ 25
100 ↔ 101 ↔ 104 ↔ 105 ↔ 120 ↔ 121 ↔ 124 ↔ 125
SCAN: ORBI SBITS ;Turn off rows
ANBI ROW0
INP 2 ;Scan row 0
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPA ;Get bits from spread table
XCHAR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPA
MOVAR SW1
ORBI SBITS
ANBI ROW1
INP 2 ;Scan row 1
ANI 17 ;Low nibble
MOVPA
ROL ;Shift + bits
ORR SW0 ;Or into - bits
MOVAR SW0
INP 2 ;Scan row 1 again
SWAP
ANI 17
MOVPA
ROL
ORAR SW1
MOVAR SW1
ADWAIT: JT1L ADWAIT ;Wait for A to D
INB ;Input a/d bits through bus
MOVAR AD
JMP OSWTCH
END